#ifndef TRACKMODEL_H
#define TRACKMODEL_H

#include <QAbstractListModel>
#include "trackitem.h"


class TrackModel : public QAbstractListModel
{
    Q_OBJECT

    Q_PROPERTY(bool existemItensSelecionados READ getExistemItensSelecionados NOTIFY existemItensSelecionadosNotify)
    Q_PROPERTY(int qtdItens READ getQtdItens NOTIFY qtdItensNotify)

public:
    explicit TrackModel(QObject *parent = 0);

    int rowCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &index, int role) const;

    Q_INVOKABLE void Marcar(int item, bool marcar);
    Q_INVOKABLE void AtualizarTrack(int idTrack, const QString &description);
    Q_INVOKABLE void RemoverTracksSelecionados();
    Q_INVOKABLE void AtualizarTracksSelecionados();

private:
    QList<TrackItem*> _itens;
    QList<QString> _itensAtualizar;    

    bool getExistemItensSelecionados();
    int getQtdItens();
    
signals:
    void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
    void existemItensSelecionadosNotify();
    void qtdItensNotify();
    void removerTrack(int idTrack);
    void trackAtualizado(int idTrack, const QString &description);
    void atualizarTrackInternet(const QString &track);
    
public slots:
    void adicionarTrack(TrackItem *item);
    
};

inline bool TrackModel::getExistemItensSelecionados() {
    foreach(TrackItem *item, _itens)
        if (item->getSelecionado())
            return true;
    return false;
}

inline int TrackModel::getQtdItens() { return _itens.count(); }

#endif // TRACKMODEL_H
